/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package gcs.interfaz;

import gcs.controladores.ControladorCategoria;
import gcs.modelo.Categoria;
import gcs.modelo.Combate;
import gcs.modelo.ParticipanteCampeonato;
import gcs.modelo.ParticipanteCategoria;
import gcs.modelo.Ronda;
import java.util.Iterator;

/**
 *
 * @author Rafe
 */
public class MenuCategoria {
    
    private Categoria categoria;
    private ControladorCategoria controladorCategoria;
    
    public MenuCategoria(ControladorCategoria controladorCategoria){
        this.controladorCategoria = controladorCategoria;
        this.categoria = this.controladorCategoria.categoria;
    }
    
    public void ejecutarMenu() throws Exception{
        
        int opcion;
        
        boolean salir = false;

        while (!salir) {

            mostrarMenuCategoria();

            opcion = UtilidadesScanner.leerEntero();

            switch (opcion) {
                case 1:
                    generarPrimeraRonda();
                    break;
                case 2:
                    mostrarCombatesRondaActual();
                    break;
                case 3:
                    introducirResultados();
                    break;
                case 4:
                    mostrarResultadosRondaActual();
                    break;
                case 5:
                    cerrarRondaActual();
                    break;
                case 6:
                    generarSiguienteRonda();
                    break;
                case 7:
                    mostrarClasificacion();
                    break;
                case 8:
                    mostrarParticipantes();
                    break;
                case 0:
                    salir = true;
                    break;
                default:
                    System.out.println("opcion no valida");
            }
        }
    }
    
    private void mostrarMenuCategoria(){
        System.out.println("Menu de la categoria: " + categoria.nombre);

            mostrarRondaActual();

            if (categoria.rondas.isEmpty()) {
                System.out.println("1. Generar primera ronda");
            } else {                
                if(!categoria.rondas.get(categoria.rondas.size()-1).cerrada){
                    System.out.println("2. Mostrar combates de la ronda actual");
                    System.out.println("3. Introducir resultados");
                    System.out.println("4. Ver resultados");
                    System.out.println("5. Cerrar ronda");
                }else{
                    System.out.println("6. Generar siguiente ronda");
                }
                System.out.println("7. Mostrar última clasificacion cerrada");
            }
            System.out.println("8. Mostrar participantes de la categoria");
            System.out.println("0. Salir");
    }
    
    public void cerrarRondaActual(){
        categoria.cerrarRondaActual();
    }
    
    public void generarSiguienteRonda() throws Exception{
        categoria.generarSiguienteRonda();
        System.out.println("Se ha generado la siguiente ronda");
    }
    
    private void mostrarRondaActual() {
        System.out.println("\tRonda actual: " + categoria.rondas.size());
    }
    
    private void mostrarCombates(Ronda ronda){
        Iterator<Combate> i = ronda.combates.iterator();
        
        int n = 1;
        
        while(i.hasNext()){
            System.out.println("\tCombate "+n+":");
            Combate c = i.next();
            System.out.println("\t\tParticipante 1:");
            System.out.println("\t\t\t"+c.participante1.toString());
            System.out.println("\t\tParticipante 2:");
            if(c.participante2!=null){
                System.out.println("\t\t\t"+c.participante2.toString());
            }else{
                System.out.println("\t\t\t-");
            }
            System.out.println();
            n++;
        }
        
    }
    
    public void mostrarResultadosRondaActual(){
        System.out.println("Resultados de la ronda:");
        int numCombate = 1;
        Iterator<Combate> ic = getRondaActual().combates.iterator();
        while(ic.hasNext()){
            Combate c = ic.next();
            System.out.println("Combate " + numCombate + ":");
            numCombate++;
            System.out.println("\tParticipante 1:" + c.participante1.toString());
            System.out.println("\t\tGolpes:" + c.golpesParticipante1);
            if(c.participante2!=null){
                System.out.println("\tParticipante 2:" + c.participante2.toString());
            }else{
                System.out.println("\tParticipante 2: null");
            }
            System.out.println("\t\tGolpes:" + c.golpesParticipante2);
        }
    }
    
    public void mostrarClasificacion(){
        System.out.println("Clasificación actual:");
        System.out.println("Posicion\tId\tNombre\tApellidos\tPuntos\tGolpes a favor\tGolpes en contra\tResistencia oponentes");
        Iterator<ParticipanteCategoria> ipc = categoria.participantesCategoria.iterator();
        while(ipc.hasNext()){
            ParticipanteCategoria pc = ipc.next();
            System.out.println(pc.posicion+"\t"+pc.toString()+"\t"+pc.puntuacion.toString());
        }
    }
    
    public void generarPrimeraRonda() throws Exception{
        categoria.generarPrimeraRonda();
        System.out.println("Se ha generado la primera ronda");
    }
    
    public void mostrarCombatesRondaActual(){
        mostrarCombates(getRondaActual());
    }
    
    private Ronda getRondaActual(){
        return categoria.rondas.get(categoria.rondas.size()-1);
    }
    
    public void introducirResultados(){
        int numCombate = 1;
        Iterator<Combate> ic = getRondaActual().combates.iterator();
        while (ic.hasNext()) {
            Combate combate = ic.next();
            System.out.println("\tCombate " + numCombate + ":");
            if (combate.participante2 == null) {
                System.out.println("\t\tEl participante 1 gana automaticamente el combate huerfano (1-0)");
                combate.golpesParticipante1=1;
                combate.golpesParticipante2=0;
            } else {
                System.out.println("\t\tGolpes del participante 1 (" + combate.participante1.toString() + ")?");
                combate.golpesParticipante1 = UtilidadesScanner.leerEntero();
                System.out.println("\t\tGolpes del participante 2 (" + combate.participante2.toString() + ")?");
                combate.golpesParticipante2 = UtilidadesScanner.leerEntero();
            }
        }
    }
    private void mostrarParticipantes(){
        Iterator<ParticipanteCategoria> ipc = categoria.participantesCategoria.iterator();
        System.out.println("Listado de participantes de la categoria:");
        System.out.println("ID\tNombre\tApellidos\tesActivo");
        while(ipc.hasNext()){
            System.out.println(ipc.next().pcamp.toString());
        }
        
    }
}
